/*
 * @Author: liuYang codkly@gmail.com
 * @Date: 2022-10-26 22:55:19
 * @LastEditors: liuYang codkly@gmail.com
 * @LastEditTime: 2022-11-09 09:53:05
 * @FilePath: \coding\blog\blog_server\src\app.js
 * @Description:
 * 暂无备注
 */
const Koa = require("koa");
const router = require("koa-router")();
// 实例化koa
const app = new Koa();
const fs = require("fs");
const { port, isCreateModel,maxFileSize } = require("./config");

// 根据数据库自动生成model
if (isCreateModel) {
  require("./common/automate");
}

const koaBody = require("koa-body");
// 文件上传
app.use(
  koaBody({
    multipart: true, // 开启文件上传
    formidable: {
      maxFileSize: maxFileSize, // 设置上传文件大小最大限制，默认2M
      keepExtensions: true, // 保留文件拓展名
    },
  })
);

// 表单校验
const bouncer = require("koa-bouncer");
app.use(bouncer.middleware());

// 返回的 中间件
const jsonResponse = require("./middleware/response.js");
app.use(jsonResponse());

// 校验token
const checkToken = require("./middleware/checkToken.js");
// 验证token的中间件函数
app.use(checkToken);

// // 路由模块化
let urls = fs.readdirSync(__dirname + "/routes");
urls.forEach((element) => {
  //routes里的js接口文件
  let module = require(__dirname + "/routes/" + element);
  //routes里的文件名作为 路由名 /api
  router.use("/" + element.replace(".js", ""), module);
});

// 配置路由 注册路由
app.use(router.routes()).use(router.allowedMethods());

app.listen(port, () => {
  console.log(`server started on ${port}`);
});
